package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloAlumno;
import com.ipartek.formacion.gestformwww.modelo.beans.Alumno;
import com.ipartek.formacion.gestformwww.modelo.beans.Curso;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroAlumno;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Karmele y Xarles
 * 
 */
public class ListarAlumnoAccion  implements Accion{
/**
 * Descripción: ejecuta la acción de listado de los alumnos
 * @param servlet
 * @param request
 * @param response
 * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
 */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        FiltroAlumno filtro = null;
        ModeloAlumno modelo = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        ArrayList matriculas = new ArrayList();
        Curso curso = new Curso();
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        if (sesion.getAttribute("usuario") != null) {
             if (sesion.getAttribute("filtroalumnos") != null) {
                  filtro = (FiltroAlumno) sesion.getAttribute("filtroalumnos");
            } else {
                filtro = new FiltroAlumno(bundle);
                filtro.setBundle(bundle);
            }

            request.setAttribute("contenido-curso", "lista-alumnos");
            filtro.setCurId(((Curso)request.getAttribute("visualizacurso")).getCurId());
            if (request.getParameter("orden")!=null){
                filtro.setOrden(request.getParameter("orden"));
            }
            if (request.getParameter("columna")!=null){
                filtro.setColumnafiltrar(request.getParameter("columna"));
            }

            ArrayList<Alumno> alumno=new ArrayList<Alumno>();
            try {
                curso = (Curso)request.getAttribute("visualizacurso");
                alumno = modelo.listarAlumnos(filtro);
                for(int i=0; i<alumno.size(); i++){
                    alumno.get(i).calcularFaltasMes(curso.getCurFaltasMes());
                    alumno.get(i).calcularFaltasTotales(curso.getCurTotalFaltas());
                }
                matriculas = modelo.cuentaMatricula(alumno);
            } catch (GestorFormacionExcepcion ex) {
                Logger.getLogger(ListarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                sesion.setAttribute("excepciones", ex.getMessage());
            }
            request.setAttribute("matriculas", matriculas);
            request.setAttribute("listaAlumnos", alumno);
            sesion.setAttribute("filtroalumnos", filtro);

            router = new AccionRouter("principal");
        } else {
            router = new AccionRouter("inicio", false);
        }
        return router;
    }

public void inicializa(AccionFactory factory) {

 }

}
